import { createRouter, createWebHashHistory } from "vue-router";
// import routerStore, { ActiveType } from '@/stores/routerStore'
// import { RouteType } from '@/types/router'
// import useInitRouter from '@/hooks/useInitRouter'
// import { adminConfig } from "@Tea/model"
import { defaultRoutes } from "./index";
import { useUserStore } from "@/stores/modules/user";
import { useMenuStore } from "@/stores/modules/menu";
import { LOGIN_URL, ROUTER_WHITE_LIST } from "@/config";
import { initDynamicRouter } from "./modules/dynamicRouter";
// import { getLocalStorage } from '@Tea/utils'
// import useInitUserInfo from '@/hooks/useInitUserInfo'

// 3. 创建路由实例并传递 `routes` 配置
const router = createRouter({
  //  内部提供 history 模式的实现。
  history: createWebHashHistory(),
  routes: defaultRoutes,
  scrollBehavior: () => ({ left: 0, top: 0 }),
});

/**
 * @description 重置路由
 * */
export const resetRouter = () => {
  const authStore = useMenuStore();
  authStore.flatMenuListGet.forEach((route) => {
    const { name } = route;
    if (name && router.hasRoute(name)) router.removeRoute(name);
  });
};

/**
 * @description 路由拦截 beforeEach
 * */
router.beforeEach(async (to, from, next) => {
  const userStore = useUserStore();
  const menuStore = useMenuStore();

  // 1.NProgress 开始
  // NProgress.start();

  // 2.动态设置标题
  // const title = import.meta.env.VITE_GLOB_APP_TITLE;
  document.title = to.meta.title ? `${to.meta.title}` : `${to.meta.title}`;

  // 3.判断是访问登陆页，有 Token 就在当前页面，没有 Token 重置路由到登陆页
  if (to.path.toLocaleLowerCase() === LOGIN_URL) {
    if (userStore.token) return next(from.fullPath);
    resetRouter();
    return next();
  }

  // 4.判断访问页面是否在路由白名单地址(静态路由)中，如果存在直接放行
  if (ROUTER_WHITE_LIST.includes(to.path)) return next();

  // 5.判断是否有 Token，没有重定向到 login 页面
  if (!userStore.token) return next({ path: LOGIN_URL, replace: true });

  // 6.如果没有菜单列表，就重新请求菜单列表并添加动态路由
  if (!menuStore.authMenuListGet.length) {
    await initDynamicRouter();
    return next({ ...to, replace: true });
  }

  // 7.存储 routerName 做按钮权限筛选
  // menuStore.setRouteName(to.name as string);

  // 8.正常访问页面
  next();
});


export default router;
